#!/usr/bin/env bash
###################
tmoe_desktop_faq() {
	neko_01_blue
	cat <<-EOF
		     ------------------------
			Q:${YELLOW}我觉得你写的脚本很菜,适配不同发行版有什么难的？不就是apt install或pacman -S,再不然就是dnf、emerge或zypper，有什么难的？${RESET}

			A1：并非所有软件都可以直接通过包管理器来安装。

			对于proot容器而言，很有可能因权限不足而无法读取部分系统数据。

			在没有权限的情况下，必须要对软件进行打补丁操作，否则将导致软件无法正常运行。
			     
			另外最麻烦的一点在于：如果上游发生了变更，那么就有可能导致脚本的部分地方失效。

			举个例子：Termux在v0.95版中不再预装debianutils,导致novnc无法正常连接，其本质原因是novnc依赖于which这种最基础的命令。
			解决方法特别简单，把该依赖（debianutils）再装回来就可以了。

			注：novnc相当于浏览器版的vnc客户端，让您无需安装vnc app即可使用vnc连接。

			再举个例子:
			VScode server在之前某次更新中发生了重大变更。
			我必须要修改远程服务器的自动打包方案，并且几乎完全重写了配置脚本。

			另外，为了解决alpine软件源中无部分软件包的问题，我还做了很多繁琐的步骤。


			A2:除了软件维护以及包管理的区别之外，vnc服务的配置其实是有门道和不同之处的。

			${BLUE}一.不同系统的vncserver的配置方案是有点小区别的。${RESET}
			deb系(虚拟机/实体机)在xstartup脚本中启动de/wm的命令前可以加上dbus-launch --exit-with-session,不加的话可能会出现无法连接至设置服务的错误，而deb系的proot容器加上这个会很容易闪退，所以需要对proot容器和虚拟机分别进行适配。其他系用--exit-with-session参数可能会发生错误，比如arch系虚拟机只需要dbus-launch,不要加那个参数，而且arch系的proot容器最好也加上dbus-launch。
			在某些情况下，可能需要开启dbus，所以你还得要做一个开关。
			开关不就一开一关，你以为很简单。其实这里又涉及到另一个问题，就是多命令问题，下文会提到的。
			对于不同系统不同平台，这块只有一点小区别而已。


			${BLUE}二:不同vnc服务有很大的差距！${RESET}

			这个就不得不提alpine，因为官方软件源暂时还没有tight/tigervnc服务，所以建议你去配置x11vnc服务,而不是去手动编译tightvnc。话说回来，x11vnc跟tightvnc的配置步骤差距真的有点大。
			再说体验。
			x11vnc在windows子系统以及linux虚拟机上的表现非常优秀，但是到了Android的linux proot容器这边就不行了。

			还有tigervnc和tightvnc
			tigervnc的兼容性明显好于tightvnc,但是前者在Android手机上运行的流畅度却不如后者。

			debian系的tightvnc真的是太不给力了，我都替他们感到着急。
			在5月份之前的版本中，由于其对GTK+3的兼容性不佳，故导致标题栏丢失。
			你还要想办法修复这个bug，自动化的解决方法是用xfconf来指定GTK+2的窗口管理器样式。这个没有人给答案，只能靠自己去探究。

			尽管上面那个bug已经修复了，但是截止目前(2020年6月上旬),tightvnc+gnome3还是存在黑屏问题，人家tigervnc就不会。


			测试是一个很麻烦的过程，有很多系统都需要去测试。

			以deb系为例，一般优先测试的是debian(stable和sid)和Ubuntu lts(例如bionic和focal)。
			arch滚动发行就不用管旧版本了，直接测试最新版。
			红帽系就先搞软呢帽fedora吧，CentOS官方的软件仓库我是真的不想说它。
			至于Fedora的冷门分支sliverblue，什么rpm-ostree都放在一边吧！我真的没有时间和精力去适配和测试这么多东西。（大哭...ヽ(*。>Д<)o゜）

			不同平台,不同系统,同一桌面测试的结果都有可能出现不同的结果！！！
			举个例子：debian sid+tightvnc/tigervnc/x11vnc+gnome3,arch+tigervnc+gnome3
			在proot容器的测试结果都是黑屏，但在虚拟机中的测试结果就不一样了。
			再举个例子：如果要在Alpine实体机给装桌面（非远程），要配置的东西就要比alpine容器+远程桌面多很多。
			由于文档资料不全，因此很多东西都需要自己去探究。

			realvnc客户端对debian系(包括ubuntu)的新版tigervnc server(standalone)兼容性不佳，可能会出现无法连接的问题。

			如果你要在proot容器里配置realvnc 服务端的话，那么你还要解决文件权限问题。

			同理，如果你已经给root用户配置了tightvnc，还要接着给普通用户配置的话，同样需要解决权限问题。

			从为用户考虑的角度出发，你得要自动解决,而不是再配置一次脚本。
			(注:尽管这两个方案实现的难度差不多)

			${BLUE}三.同一桌面，不同版本的区别。${RESET}
			对于不同版本的DE，它的session名称/启动脚本还有可能不一样。比如在旧版系统(如Ubuntu 18.04 bionic和debian 10 buster）中，plasma桌面对应的是startkde,而在新版ubuntu，debian sid和arch等发行版中，plasma桌面分成了startplasma-x11和startplasma-wayland，最精简安装的话，可能没有startkde这个脚本了。
			对于同一个DE来说,它有可能有两个不同的启动命令。一个是启动脚本，另一个是会话名称。比如xfce有startxfce4和xfce4-session。
			究竟哪个才是最优解呢？你得要自己测试才能得出答案。偷偷告诉你，真的是有区别的。要不是有人跟我反馈，我都不知道其中一个竟然会产生新的bug。

			如果还要做转发音频和X的话，就要考虑到网络类型了。
			如果是桥接网络的话，那问题不大，但是WSL2的NAT网络，就要得要用到宿主机的ip了，一般都是B类内网地址。
			如果涉及到tcp端口映射，要搞自动化检测+配置就麻烦了，但是手动配置还是挺简单的，因此端口映射这块我只写了qemu虚拟机的配置方案。

			${BLUE}四.不同架构的区别。${RESET}

			对于x86_64独占，而其它平台没有的软件包来说，只需要简单地加上一个检测步骤即可。
			但是对于其它架构都有，唯独mipsel架构没有的来说，就有点麻烦，因为有可能连基础依赖都会缺失。
			一小步走错，导致全盘崩溃也是又有可能的。
			对于其它架构，例如s390x和ppc64el,我只是简单地用qemu测试了一下，所以反倒是没在这上面耽误太多时间。


			${BLUE}五.不同虚拟化平台的区别。${RESET}

			在不同的虚拟化平台进行测试，也是有区别的。
			对于linux程序而言，我个人觉得Linux平台的Qemu+kvm的测试环境要比Windows 平台的HyperV虚拟机好很多。
			应该说各有所长吧，HyperV更适合用来测试windows程序。
			我之前在HyperV上踩了好多坑，想起来就难受，浪费我那么多时间。
			尽管HyperV对于Debian和Ubuntu等大众发行版的兼容性极佳，但对于MX linux19.0以及LMDE4等小众发行版却并非如此，后者总会出现奇怪的BUG。

			如果是在容器环境中测试的话，那么你还得要考虑到systemd的问题。

			总的来说,linux远程桌面的bug不是一般的多。
			特别是在没有权限的情况下，解决起来就更麻烦了。
			真正让我生气和心痛的地方并不在于解决问题有多难，而在于测试这些鬼东西真的超级浪费时间！！！
			有时候一个小问题就浪费我一个下午的时间，我一想起来就很生气，超级生气。
			重要的事情说三遍！浪费时间！！！

			------------------------
			${RED}linux上最好用的桌面环境竟然是。。。${RESET}
			按回车键继续阅览
			------------------------
	EOF
	press_enter_to_continue
	cat <<-EOF
		            -----------------------------
			        Q:${YELLOW}哪个发行版最好用，最流畅，最适合新手？如何才能更好地使用linux系统？${RESET}

					A：要说哪个比较好用还是得要靠你自己体验啊！

					比如说gentoo，它有其独特的魅力，但是我觉得它有点浪费时间，编译软件太久了。（大哭...ヽ(*。>Д<)o゜）
					对于我来说，我更希望包管理器有个庞大的二进制文件仓库作为顶梁柱。

					你可以实际体验过后告诉我哪个发行版比较好用。

					proot容器与chroot容器一样，仅提供文件系统级的隔离。

					因为它与Android原系统共享相同的内核、硬件、进程空间和网络子系统，所以说它的效率已经算是非常高了。
					由于Android用的是阉割过的linux内核,所以可能会存在某些问题。

					对于你的问题，我给出三个回答吧！

					${BLUE}一.更流畅:把桌面环境(简称DE)换成窗口管理器(简称WM)试试。${RESET}
					温馨提醒:WM对于新手来说，可能没有DE好用。
					如果所有东西都需要自己配置的话，那么这些东西可能会变得很难用，不适合新手入门。
					而且绝大多数WM追求的是轻量，简约和纯净。
					我在写不同WM的配置方案时，就觉得每个WM都在说自己很lightweight,很pure。

					${BLUE}二.更适合新手:${RESET}
					Ubuntu在个人计算机上很适合新手使用，因为它对闭源驱动的兼容性可能会更好一点。
					既然你是在容器中运行，那么配合我的脚本使用debian也是不错的体验呢！
					还有的话，fedora也可以试试，我觉得它比centos好用很多。
					至于arch和manjaro，说实在我更推荐arch，不过我觉得都可以试一下。
					哪个好用就用哪个呗！适合自己的才是最好的。
					因为我已经解决了安装过程中存在的很多问题，所以你应该都可以无障碍上手。
			               
				   后期注：如果你使用的不是手机上的容器，而是实体机，追求的是轻办公、轻娱乐，让人用起来很舒适的环境。
				   那么我就推荐一下Mint吧！
				   基于Ubuntu的Linux Mint主要分支版本，以及基于Debian的LMDE(Linux Mint Debian Edition)都是不错的选择呢！§(*￣▽￣*)§
			                 

					对萌新来说，不同发行版最主要的区别可能不是包管理器，而是桌面环境(DE)。
					如果你经常用我的脚本，那么你也许会发现DE是可以自行安装的，你没必要非得使用发行版默认的DE，而且不同DE在不同发行版上的体验也是有所区别的。

					更适合新手的往往是那些大而全的DE，例如gnome和kde plasma。
					我之前看过统计数据，排名前三的DE分别是GNOME3,KDE plasma 5和xfce4。
					1.Gnome是许多发行版默认的DE，例如Ubuntu,Debian和Fedora,排名靠前不足为奇。
			                
					后期注：如果你正在使用带有触摸屏的实体机（例如：平板电脑或二合一PC），那么它的触屏体验在三者中可能是最佳的，相当不错。
					对于窗口的交互式体验，以及操作逻辑之处，我也是非常欣赏的。

					注2：proot容器暂时不要装此桌面。


					2.plasma桌面非常华丽，可配置选项多，拥有高度的可自定义性。

					默认配置就令人赏心悦目，非常美观。

					如果您使用的是proot容器的话，那么现阶段（2020年6月上旬）不建议安装。

					在上文中已经提过了，虚拟机和容器环境有很大的区别，此处不再赘述。

					之前曾在Android的Ubuntu 18.04 proot容器里体验过kde plasma，流畅度并不如xfce。
			                
					如果直接在proot容器里安装的话，那么很有可能遇到程序崩溃，无法正常启动的问题，此外你还得要自己解决很多问题，修bug可不是一件简单的事情。

					如果使用的是chroot容器的话，那么可以选择arch+kde+tigervnc。
			                

					3.综合来说，桌面环境三剑客中在手机上体验最好的是xfce4。
					至于其他桌面，例如lxde，或许它会比xfce更流畅，但是呢！个人觉得xfce更好用一点(逃...

					${BLUE}三.更好地使用linux: 可以用qemu虚拟机跑个alpine，不装GUI。${RESET}

					我写的脚本现在已经支持配置qemu了，可以很方便地在宿主机为Android的设备上安装x64虚拟机，并运行docker。

					受制于Android原系统的内核，绝大多数手机使用chroot/proot容器可能无法原生运行docker容器。而qemu虚拟机则不存在这些限制，但是效率会低一些。(此处指tcg加速，不是kvm)

					在arm64的Android手机用上alpine x64 docker，就能更好地发挥出linux系统的作用了。
					不嫌效率低，也可以用更全面的发行版，例如debian x64。
			                  
					alpine之所以如此高效和轻量化，是因为它有些东西是残缺的，更贴切一点来说是非标准的，当你把缺失的东西补回来后，它是否还会像之前那样轻量化呢？
					这是个值得思考的问题。
					-----------------------------
					${RED}最后一页是正经问答${RESET}
					-----------------------------
	EOF
	press_enter_to_continue
	cat <<-EOF
		    -----------------------------
			Q:${YELLOW}为什么绝大多数的命令和文件夹名称都跟debian有关,我有觉得很别扭，特别难受。${RESET}

			A:因为去年(2019年)只适配了termux和debian,今年(2020年)早些时候又适配debian系列的其它发行版，例如kali和ubuntu。
			后来，大概在四月初的时候才适配了其它系的发行版，例如：arch系，红帽系和alpine等。
			适配不同的发行版是一件非常浪费时间的事情，有时候修复一个小bug都要花上几个小时的时间。
			因为我不想把时间浪费在无所谓的事情上，所以就不想改了。
			虽然修改相关命令和文件夹名称很简单，但是需要花费大量的时间去调试。
			-----------------------
			Q:${YELLOW}安装过程中，当提示输入密码时，termux无法弹出虚拟键盘${RESET}

			A:有四种解决方法：
			① 先将termux切换至后台，再切换回来
			② 使用悬浮键盘
			③ 侧划termux底部小键盘至黑色区域，点击该区域即可弹出。
			④ 直接点击输入框
			------------------------
			Q:${YELLOW}I don't know how to use it?${RESET}

			A:Type ${GREEN}startvnc${RESET} to start vncserver,type ${GREEN}stopvnc${RESET} to stop it.
			You can also type ${GREEN}startxsdl${RESET} to startx.
			------------------------
			Q:${YELLOW}启动VNC的命令有点复杂，我记不住${RESET}🤣，欺负老年人么？st...什么来着😨

			A:完整命令是startvnc，您只需记住st，然后就能借助zsh的自动补全插件来解决。
			输完st后，您可以按下TAB键(⇆),即可生成补全内容。
			您也可以直接按方向键→或者是↑，此操作亦能自动补全。😋
		Q:啊，就这？
		不会吧，不会吧，不会真的有人认为我连这么简单的命令都记不住？🙂
		Linux Deploy它不香吗？什么命令都不用记。
		A:
		可是你刚刚。。。
		Q:
		可是什么可是！ 
		你在教我做事？
		哈哈，我在钓鱼，你上钩了。懂？
		你品，你细品。

		A:
		宁可真是位带阴阳师呢！

		Q:
		你急了，你急了
			------------------------
			Q:${YELLOW}我可以在Linux Deploy上使用这个脚本吗？${RESET}

			A:可以哒！ヾ(≧▽≦*)o 您可以在其它主流的GNU/Linux发行版，包括但不限于容器、虚拟机和实体机上使用这个脚本。
			------------------------
			END（完结）
			                                                                                 2020年6月初稿，7月修订
			                                                                                 Tmoe-linux开发者
			------------------------
	EOF
}
#####################
tmoe_desktop_faq
